package com.candy.talk;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.LogManager;
import java.util.logging.Logger;

/**
 * @author donglin
 * @Title:
 * @类名: Talk
 * @date 2020/10/14
 */
@ServerEndpoint("/abcd")
public class Talk {

    private static ConcurrentHashMap<String, Talk> webSocketSet = new ConcurrentHashMap<>();

    //与某个客户端的连接会话，需要通过它来给客户端发送数据
    private Session session;
    private String id = "";
    //连接自动调用的方法
    @OnOpen
    public void onOpen(Session session){
        this.session = session;
        this.id = id;//接收到发送消息的人员编号
        webSocketSet.put(id, this);     //加入set中
        System.out.println("我已经建立好了连接");
        System.out.println(session.getId());
        System.out.println();



    }
//    发生错误的时候回调用的方法
    @OnError
    public void onError(Throwable throwable){

    }
//    关闭连接是自动调用的方法
    @OnClose
    public void onClose(){

    }
//    客户端向服务器发送消息时自动调用的方法
    @OnMessage
    public void onMessage(String message, Session session){
        String sendMessage = message.split("[|]")[0];
        String sendUserId = message.split("[|]")[1];
        try {
            if(sendUserId.equals("0")) {
                sendtoAll(sendMessage);
            }else {
                sendtoUser(sendMessage, sendUserId);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(message);
        try {
            session.getBasicRemote().sendText("您有新的订单了");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    /**
     * 发送信息给指定ID用户，如果用户不在线则返回不在线信息给自己
     * @param message
     * @param id
     * @throws IOException
     */
    public void sendtoUser(String message,String id) throws IOException {
        if (webSocketSet.get(id) != null) {
            if(!id.equals(id)) {
                webSocketSet.get(id).sendMessage("用户" + id + "发来消息：" + " <br/> " + message);
            }else {
                webSocketSet.get(id).sendMessage(message);
            }
        } else {
            //如果用户不在线则返回不在线信息给自己
            sendtoUser("当前用户不在线",id);
        }
    }

    /**
     * 发送信息给所有人
     * @param message
     * @throws IOException
     */
    public void sendtoAll(String message) throws IOException {
        for (String key : webSocketSet.keySet()) {
            try {
                webSocketSet.get(key).sendMessage(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }




    public void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }
}









